Compute Optimizer から アイドル状態のEBSボリュームを洗い出す

Compute Optimizer から アイドル状態のEBSボリュームを洗い出す

Clock Icon2024.11.22

以下更新から Compute Optimizer にてアイドルリソース検知がサポートされています。

https://dev.classmethod.jp/articles/aws-compute-optimizer-idle-resource-recommendation/

サポートされているリソースは以下のとおりです。

  • EC2 インスタンス
  • EC2 Auto Scaling グループ
  • EBS ボリューム
  • Fargate で実行されている ECS サービス
  • RDS インスタンス

今回は EBSボリューム に絞って、 内容を深堀りしてみます。

また、これまで Trusted Advisor でも EBSボリュームの非アクティブ検知はできていたので、 それとの違いも調べてみます。

前提

Compute Optimizer の有効化については割愛します。 代わりに以下公式ドキュメントを参照ください。

https://docs.aws.amazon.com/compute-optimizer/latest/ug/getting-started.html

とりあえずマネコンを見てみる

[Recommendations > Idle resources] にてアイドルリソースの一覧を確認できます。 EBSに絞るには リソースタイプ = EBS volume で絞ります。

sc_2024-11-22_09-43-30_12227

各推奨事項の結果は アイドル(Idle)Unattached の2種類です。

アイドル(Idle) 詳細のサンプル

Idle ステータスのEBSボリューム画面は以下のような表示です。 "This EBS volume is idle." コールアウトが記載されています。

sc_2024-11-22_09-49-15_29986

This EBS volume is idle.

  • Verify whether you need this volume. If you don't need it, we recommend that you create a snapshot of the volume and consider deleting it.
  • このボリュームが必要かどうかを確認します。必要ない場合は、ボリュームのスナップショットを作成し、削除を検討することをお勧めします。 (DeepL訳)

[Idle criteria]

  • If the read/write operation is less than 1 IOPS per day over the 14-day lookback period.
  • 14日間のルックバック期間において、読み書き操作が1日あたり1IOPS未満の場合。 (DeepL訳)

Unattached 詳細のサンプル

Unattached ステータスのEBSボリューム画面は以下のような表示です。 "This EBS volume is unattached." コールアウトが記載されています。

sc_2024-11-22_09-53-49_16990

This EBS volume is unattached.

  • Verify whether you need this volume. If you don't need it, we recommend that you create a snapshot of the volume and consider deleting it.
  • このボリュームが必要かどうかを確認します。必要ない場合は、ボリュームのスナップショットを作成し、削除を検討することをお勧めします。 (DeepL訳)

[Idle criteria]

  • If the volume isn't attached to any EC2 instance over the 32-day lookback period.
  • 32日間のルックバック期間中、ボリュームがどのEC2インスタンスにもアタッチされていない場合。 (DeepL訳)

AWS CLI から棚卸ししてみる

AWS CLI からの棚卸しを試してみます。 aws compute-optimizer get-idle-recommendations コマンドを使用します。

以下シンプルな実行例です。

aws compute-optimizer get-idle-recommendations \
  --region ap-northeast-1 --output yaml \
  --filters name=ResourceType,values=EBSVolume
出力例
errors: []
idleRecommendations:
- accountId: '111111111111'
  finding: Unattached
  findingDescription: This EBS volume is unattached because isn’t attached to any
    EC2 instance.
  lastRefreshTimestamp: '2024-11-22T03:00:00+09:00'
  lookBackPeriodInDays: 32.0
  resourceArn: arn:aws:ec2:ap-northeast-1:111111111111:volume/vol-01afexample
  resourceId: vol-01afexample
  resourceType: EBSVolume
  savingsOpportunity:
    estimatedMonthlySavings:
      currency: USD
      value: 0.768
    savingsOpportunityPercentage: 100.0
  savingsOpportunityAfterDiscounts:
    estimatedMonthlySavings:
      currency: USD
      value: 0.6259
    savingsOpportunityPercentage: 100.0
  tags: []
  utilizationMetrics:
  - name: VolumeReadOpsPerSecond
    statistic: Maximum
    value: 0.0
  - name: VolumeWriteOpsPerSecond
    statistic: Maximum
    value: 0.0
- accountId: '111111111111'
  finding: Unattached
... (略)

※ Organizations 連携を有効化している環境の場合は、 --account-ids パラメータを指定して、特定メンバーアカウントにおける推奨事項を確認できます。

項目を絞って、テーブル化してみます。

query='idleRecommendations[].{
AccountID:accountId,
ResourceID:resourceId,
ResourceNameTag:tags[?key==`Name`]|[0].value,
Finding:finding,
EstimatedMonthlySavings:savingsOpportunity.estimatedMonthlySavings.value
}'

aws compute-optimizer get-idle-recommendations \
  --region ap-northeast-1 --output table \
  --filters name=ResourceType,values=EBSVolume \
  --query "${query}"
出力例
-----------------------------------------------------------------------------------------------
|                                   GetIdleRecommendations                                    |
+--------------+---------------------------+-------------+------------------+-----------------+
|   AccountID  |  EstimatedMonthlySavings  |   Finding   |   ResourceID     | ResourceNameTag |
+--------------+---------------------------+-------------+------------------+-----------------+
|  111111111111|  24.0                     |  Idle       |  vol-0019example |  HOGE-03        |
|  111111111111|  11.52                    |  Idle       |  vol-00c5example |  HOGE-04        |
|  111111111111|  12.0                     |  Idle       |  vol-0178example |  HOGE-02        |
|  111111111111|  0.48                     |  Idle       |  vol-0200example |  FUGA           |
|  111111111111|  4.8                      |  Unattached |  vol-034eexample |  None           |
|  111111111111|  19.2                     |  Unattached |  vol-0651example |  None           |
|  111111111111|  6.0                      |  Idle       |  vol-06f5example |  PIYO-02        |
+--------------+---------------------------+-------------+------------------+-----------------+

[補足] Trusted Advisor との違いは?

Trusted Advisor にも [利用頻度の低い Amazon EBS ボリューム] といった似たようなチェック項目があります。

sc_2024-11-22_10-40-42_6597

アラート基準の違いをまとめると以下のようになります。

Trusted Advisor Compute Optimizer
7日間アタッチされていない
7日間のIOPSが 1日あたり 1IOPS未満
32日間アタッチされていない
14日間のIOPSが 1日あたり 1IOPS未満

アイドル判断のIOPS基準は同じですが、 見ている期間が違いますね。 Compute Optimizer のほうが、より広い期間を見てくれています。

誤検知を避けたい場合は Compute Optimizer のほうが良さそうです。

おわりに

以上 Compute Optimizer 新機能のEBS部分を深堀りしてみました。

今まで Trusted Advisor の機能を使って「アイドル状態のEBS」を検知している方がいらっしゃれば、 これを機に Compute Optimizer への活用に乗り換えても良いかもしれません。

参考になれば幸いです。

参考

https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-idle-recommendations.html

https://docs.aws.amazon.com/awssupport/latest/user/cost-optimization-checks.html

https://dev.classmethod.jp/articles/aws-compute-optimizer-idle-resource-recommendation/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.